# -*-coding: Utf-8 -*-
# @File : admin .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time：2023/6/12

'''
管理员视图层
'''

from lib import common
from interface import admin_interface, common_interface

login_user_admin = {
    'username': None,
}


# 注册功能
def register():
    while True:
        # （1）输入用户名和密码
        username_admin = input('请输入用户名:>>>>').strip()
        password_admin = input('请输入密码:>>>>').strip()
        # 二次校验密码
        re_password_admin = input('请再次输入密码:>>>>').strip()

        # （2）逻辑判断，两次密码是否一致
        if password_admin == re_password_admin:
            # （2.1） 两次密码一致，对密码进行加密并调用管理员视图层进行注册函数
            # 获取加密需要的盐
            salt = common.get_verify_code(6)
            # 数据拼接：盐 + 二次输入的密码
            # 加密输入的密码
            encrypted_password_after = common.encrypt_decrypt(salt + re_password_admin)

            # 调用接口层进行信息的判断与注册
            flag, msg = admin_interface.admin_register_interface(username_admin, encrypted_password_after, salt)

            # 根据返回的结果进行打印输出反馈结果
            if flag:
                print(msg)
                break
            else:
                print(msg)
        else:
            # （2.2） 两次密码不一致，二次重新输入
            print('请重新校验密码!')


# 登录功能
def login():
    while True:
        # （1）输入用户名和密码
        username_admin = input('请输入用户名:>>>>').strip()
        if username_admin == 'q':
            break
        password_admin = input('请输入密码:>>>>').strip()
        login_random_code = common.get_verify_code(4)
        login_input_code = input(f'请输入验证码进行登陆::>>{login_random_code}::>>').strip()
        # （2）调用管理员接口进行登陆操作
        flag, msg = admin_interface.admin_login_interface(username_admin, password_admin, login_input_code,
                                                          login_random_code)

        if flag:
            print(msg)
            # 定义全局登录用户信息
            login_user_admin['username'] = username_admin
            break
        else:
            print(msg)


# 创建课程功能
@common.auth('admin')
def create_course():
    while True:
        # （1） 先选择学校
        # (1.1) 获取所有学校名称
        flag, school_lists = common_interface.get_all_school_interface()
        if not flag:
            print(school_lists)
            # 不存在学校信息则打回，让管理员注册新的学校
            break

        for index, school_name in enumerate(school_lists):
            print(f'当前编号::>>{index}  当前学校名:>>{school_name}')

        choice = input('请输入学校编号:>>>').strip()
        if choice == 'q':
            print('退出当前功能,感谢使用!!')
            break

        if not choice.isdigit():
            print('请输入正确的编号ID:>>>')
            continue

        choice = int(choice)

        # （1.2） 判断输入的编号是否在学校列表长度内
        if choice not in range(len(school_lists)):
            print('请确认当前输入的编号!!')
            continue

        # 获取选择到的学校的名字
        school_name = school_lists[choice]

        # （2） 选择学校后，输入课程名称
        course_name = input('请输入需要创建的课程名字:>>>').strip()
        course_timestamp = input('请输入课程周期:>>>').strip()
        course_price = input('请输入课程价格:>>>').strip()

        # （3） 调用创建课程接口，让管理员去创建接口
        # school_name : 将课程添加到目标学校里
        # course_name : 需要添加的课程名字
        # login_user_admin['username'] : 当前操作的管理员用户
        flag, msg = admin_interface.admin_create_courses_interface(
            school_name, course_name, login_user_admin['username'], course_timestamp, course_price)
        if flag:
            print(msg)
            break
        else:
            print(msg)


# 创建学校功能
@common.auth('admin')
def create_school():
    while True:
        # （1）管理员输入学校的名字和地址
        school_name = input('请输入学校名称:>>').strip()
        print('温馨提示:>>输入q退出')

        if school_name == 'q':
            break
        school_address = input('请输入学校地址:>>').strip()

        # （2）调用接口进行学校注册
        # (当前登录的管理员名字,创建的学校名字,创建的学校地址)
        flag, msg = admin_interface.admin_create_school_interface(
            login_user_admin['username'], school_name, school_address)

        # （3）根据反馈结果，打印相关提示语
        if flag:
            print(msg)
            break
        else:
            print(msg)


# 创建讲师功能
@common.auth('admin')
def create_teacher():
    while True:
        # （1） 管理员输入创建的讲师名字
        teacher_name = input('请输入讲师的名字:>>>').strip()
        # （2） 调用接口创建讲师
        # (讲师名字,当前登录的管理员名字)
        flag, msg = admin_interface.admin_create_teacher_interface(teacher_name, login_user_admin['username'])

        if flag:
            print(msg)
            break
        else:
            print(msg)


func_menus = '''
 ================欢迎使用选课系统=========================
                    1.注册
                    2.登陆
                    3.创建学校
                    4.创建课程（先选择学校）
                    5.创建讲师
                    
 ==================退出系统(指令q)=======================
'''

func_dict = {
    '1': register,
    '2': login,
    '3': create_school,
    '4': create_course,
    '5': create_teacher,
}


# 管理员视图主函数
def admin_view():
    while True:
        print(func_menus)

        choice = input('请输入功能编号:>>>>>').strip()
        print('温馨提示:>>输入q退出')

        if choice == 'q':
            break

        # 对输入的字符做判断：是否属于数字/是否属于字典内的编号范围
        elif not choice.isdigit() or choice not in func_dict:
            print('>>>>请输入正确的编号!!<<<<')
            continue

        # 根据功能编号，调用对应的功能
        func_dict[choice]()
